package com.itcast;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;

import java.io.*;

public class PoIDemo {
    @Test
    public void test1() throws IOException, InvalidFormatException {
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new File("D://hello.xlsx"));
        XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
        for (Row Row : sheet) {
            for (Cell cell : Row) {
                System.out.println(cell);
            }
        }
    }


    /**
     * 先获取最后一行，最后一个单元格节省性能，提高速度，不浪费内存
     * @throws IOException
     * @throws InvalidFormatException
     */
    @Test
    public void test2() throws IOException, InvalidFormatException {
//        获取excle对象，并加载文件
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new File("d://hello.xlsx"));
//        获取第一张表
        XSSFSheet sheetAt = xssfWorkbook.getSheetAt(0);
//        获取最后一行数据
        int lastRowNum = sheetAt.getLastRowNum();
//        遍历所有行
        for (int i = 0; i < lastRowNum; i++) {
//            获取每一行
            XSSFRow row = sheetAt.getRow(i);
//            根据每一行，获取每一行最后一个单元格
            short lastCellNum = row.getLastCellNum();
//            遍历每一个单元格
            for (int j = 0; j < lastCellNum; j++) {
//                获取每一个单元格
                XSSFCell cell = row.getCell(j);
//                输出单元格内容
                System.out.println(cell);
            }
        }

    }
@Test
    public void test3() throws IOException, InvalidFormatException {
//        获取excle对象
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
//        创建输入流
    OutputStream outputStream = new FileOutputStream(new File("D://hi.xlsx"));
//    创建一张excle表
        XSSFSheet sheet = xssfWorkbook.createSheet("aaaa");
//        创建第一行
        XSSFRow row = sheet.createRow(0);
//        创建第一个单元格，并设置数据
        row.createCell(0).setCellValue("id");
//        创建第二个单元格，并设置数据
        row.createCell(1).setCellValue("name");
        row.createCell(2).setCellValue("age");
//        循环创建行，单元格，并插入数据
        for (int i = 0; i < 10; i++) {
            XSSFRow row1 = sheet.createRow(i);
            row1.createCell(0).setCellValue(i);
            row1.createCell(1).setCellValue("小明");
            row1.createCell(2).setCellValue(3);
        }
//        将excle对象数据写入文件
        xssfWorkbook.write(outputStream);
//        刷新，保证所有数据都写入
        outputStream.flush();
//        关闭流，释放资源
        xssfWorkbook.close();
        outputStream.close();


    }
}
